#pragma once

#include "Object/Object.h"
#include "Output/Console.h"
#include "TestScriptInheriableObject.m.h"
#include "Containers/ScriptDelegateImplement.h"

RCLASS()
class  RTestScriptInheriableObject : public RObject
{
    ROBJECT


    RFUNCTION()
    virtual void TestFunction()
    {
        WH::PrintLine(U"TestFunction In RTestScriptInheriableObject");
    }

    RFUNCTION()
    virtual void TestFunction(int64_t TestPatameter)
    {
        WH::PrintLine(U"TestFunction with parameter In RTestScriptInheriableObject");
    }

    RPROPERTY(Name="TestProperty", Getter = "GetTestProperty", Setter = "SetTestProperty")

    int64_t TestProperty = 0;

    int64_t GetTestProperty()
    {
        return TestProperty;
    }

    void SetTestProperty(int64_t InTestProperty)
    {
        TestProperty = InTestProperty;
    }

    RFIELD()
    TScriptDelegate<void(int)> TestDelegate;

    RFIELD()
    TVector<int64_t> TestVector;
};
